﻿#region NeoPatterns
// 
// NeoPatterns framework is released under LGPLv3 license.
// See http://www.opensource.org/licenses/lgpl-3.0.html for more details.
// 
// Please visit http://neopatterns.wikidot.com for more information about NeoPatterns
// 
// Copyright (c) Pascal Craponne 2008
// 
#endregion

using System;
using System.Collections.Generic;
using System.Reflection;
using NeoPatterns.Core.Aop;

namespace NeoPatterns.Core.Aop
{
    /// <summary>
    /// Used to build aspect interceptions
    /// </summary>
    public interface IAspectBuilder
    {
        Type GetAdvisedType(Type baseTypeOrInterface, IEnumerable<Aspect> aspects, out MemberInfo aspectsMember);

        /// <summary>
        /// Builds object with interception and aspects
        /// </summary>
        /// <param name="baseTypeOrInterface"></param>
        /// <param name="aspects"></param>
        /// <returns></returns>
        object CreateInstance(Type baseTypeOrInterface, IEnumerable<Aspect> aspects);
    }
}